package sifeap.entities.usuarios;

import java.io.Serializable;
import java.util.List;

import javax.persistence.Cacheable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import sifeap.entities.convenios.Convenio;
import sifeap.entities.eventos.Evento;
import sifeap.entities.solicitudesauxilio.SolicitudAuxilio;
import sifeap.entities.solicitudescredito.SolicitudCredito;


/**
 * The persistent class for the usuarios database table.
 * 
 */
@Entity
@Cacheable(false)
@Table(name="usuarios", schema="sifeap")
public class Usuario implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(unique=true, nullable=false, length=20)
	private String nombreUsuario;

	@Column(nullable=false, length=1)
	private String habilitado;

	@Column(nullable=false, length=120)
	private String password;

	@Column(nullable=false, length=1)
	private String requierecambio;
	
//	@Column(length=256)
	private String respuestapregunta;

	//bi-directional many-to-one association to PreguntaSeguridad
	@ManyToOne
	@JoinColumn(name="idpreguntaseguridad")
	private PreguntaSeguridad preguntasseguridad;

	@OneToMany(mappedBy="usuario")
	private List<Evento> eventos;
	
	@OneToMany(mappedBy="usuario")
	private List<Convenio> convenios;

	@ManyToMany
	@JoinTable(
		name="rolesusuario", schema="sifeap"
		, joinColumns={
			@JoinColumn(name="nombreusuario", nullable=false)
			}
		, inverseJoinColumns={
			@JoinColumn(name="nombrerol", nullable=false)
			}
		)
	private List<Rol> roles;
	
	//bi-directional many-to-one association to SolicitudAuxilio
	@OneToMany(mappedBy="usuario")
	private List<SolicitudAuxilio> solicitudesauxilios;

	//bi-directional many-to-one association to SolicitudCredito
	@OneToMany(mappedBy="usuario")
	private List<SolicitudCredito> solicitudescreditos;

	public Usuario() {
	}

	public String getNombreUsuario() {
		return this.nombreUsuario;
	}

	public void setNombreUsuario(String nombreUsuario) {
		this.nombreUsuario = nombreUsuario;
	}

	public String getHabilitado() {
		return this.habilitado;
	}

	public void setHabilitado(String habilitado) {
		this.habilitado = habilitado;
	}

	public String getPassword() {
		return this.password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getRequierecambio() {
		return this.requierecambio;
	}

	public void setRequierecambio(String requierecambio) {
		this.requierecambio = requierecambio;
	}

	public List<Evento> getEventos() {
		return this.eventos;
	}

	public void setEventos(List<Evento> eventos) {
		this.eventos = eventos;
	}

	public Evento addEvento(Evento evento) {
		getEventos().add(evento);
		evento.setUsuario(this);

		return evento;
	}

	public Evento removeEvento(Evento evento) {
		getEventos().remove(evento);
		evento.setUsuario(null);

		return evento;
	}

	public List<Rol> getRoles() {
		return this.roles;
	}

	public void setRoles(List<Rol> roles) {
		this.roles = roles;
	}
	
	public List<Convenio> getConvenios() {
		return convenios;
	}
	
	public void setConvenios(List<Convenio> convenios) {
		this.convenios = convenios;
	}

	public String getRespuestapregunta() {
		return this.respuestapregunta;
	}

	public void setRespuestapregunta(String respuestapregunta) {
		this.respuestapregunta = respuestapregunta;
	}

	public PreguntaSeguridad getPreguntasseguridad() {
		return this.preguntasseguridad;
	}

	public void setPreguntasseguridad(PreguntaSeguridad preguntasseguridad) {
		this.preguntasseguridad = preguntasseguridad;
	}
}